#include "common.h"

/* 
删除带头结点的单链表中的重复的值相同的元素，注意题目没有说链表是有序的
 */

void deldup(linklist &l)
{
    lnode *p, *q, *r;
    p = l->next;
    while (p) // p用于遍历链表
    {
        q = p;
        while (q->next) // q遍历p后面的结点，并与p数值比较
        {
            if (q->next->data == p->data)
            {
                r = q->next;       // r保存需要删掉的结点
                q->next = r->next; // 需要删掉的结点的前后结点相接
                free(r);
            }
            else
                q = q->next;
        }
        p = p->next;
    }
}
int main(int argc, char const *argv[])
{
    linklist l;
    int a[] = {1, 1, 2, 2, 4, 5, 5, 6, 7, 8, 8, 9};
    makelist(l, a, sizeof(a) / sizeof(int));
    printlist(l);
    deldup(l);
    printlist(l);
    return 0;
}
